#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import subprocess
from PIL import Image

def create_icns():
    """创建macOS图标文件"""
    try:
        # 创建临时目录
        if not os.path.exists('icon.iconset'):
            os.makedirs('icon.iconset')
        
        # 创建基础图像（1024x1024）
        img = Image.new('RGB', (1024, 1024), color='#2196F3')
        img.save('icon_1024.png')
        
        # 创建不同尺寸的图标
        sizes = [16, 32, 64, 128, 256, 512, 1024]
        for size in sizes:
            img_size = (size, size)
            resized = Image.open('icon_1024.png')
            resized.thumbnail(img_size, Image.Resampling.LANCZOS)
            
            # 保存普通尺寸
            resized.save(f'icon.iconset/icon_{size}x{size}.png')
            # 保存@2x尺寸
            if size * 2 <= 1024:
                resized = Image.open('icon_1024.png')
                resized.thumbnail((size * 2, size * 2), Image.Resampling.LANCZOS)
                resized.save(f'icon.iconset/icon_{size}x{size}@2x.png')
        
        # 使用iconutil创建.icns文件
        result = subprocess.run(['iconutil', '-c', 'icns', 'icon.iconset'], 
                              capture_output=True, text=True)
        
        if result.returncode != 0:
            raise Exception(f"iconutil failed: {result.stderr}")
            
        # 重命名生成的图标文件
        if os.path.exists('icon.icns'):
            if os.path.exists('app.icns'):
                os.remove('app.icns')
            os.rename('icon.icns', 'app.icns')
        
        # 清理临时文件
        subprocess.run(['rm', '-rf', 'icon.iconset'])
        os.remove('icon_1024.png')
        
        # 验证文件是否创建成功
        if not os.path.exists('app.icns'):
            raise Exception("图标文件创建失败")
            
        print("图标文件已创建：app.icns")
        return True
        
    except Exception as e:
        print(f"创建图标文件时出错: {str(e)}")
        # 清理可能存在的临时文件
        if os.path.exists('icon.iconset'):
            subprocess.run(['rm', '-rf', 'icon.iconset'])
        if os.path.exists('icon_1024.png'):
            os.remove('icon_1024.png')
        if os.path.exists('icon.icns'):
            os.remove('icon.icns')
        return False

if __name__ == "__main__":
    create_icns() 